package com.easyexcel.demo.strategy;

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;


@Slf4j
public class DynamicMergeStrategy extends AbstractMergeStrategy {
    private final int mergeTimeSize;   // 合并次数

    /**
     * 动态合并策略构造函数
     *
     * @param mergeTimeSize 需执行的合并次数（例如3次）
     */
    public DynamicMergeStrategy(int mergeTimeSize) {
        {
            this.mergeTimeSize = mergeTimeSize;
        }
    }

    @Override
    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
        int rowIndex = cell.getRowIndex();
        int colIndex = cell.getColumnIndex();

        // 仅处理起始行的指定列范围
        // 起始行索引（从0开始）
        int startRow = 1;
        // 起始列索引（G列=6）
        int startCol = 6;

        if (rowIndex != startRow || colIndex != startCol) {
            //log.info("跳过处理 rowIndex  {} colIndex {}", rowIndex, colIndex);
            return;
        }


        // 每2列合并一次，循环指定次数
        for (int i = 0; i < mergeTimeSize; i++) {
            int currentCol = startCol + i * 2;

            // 创建合并区域（2行×2列）
            CellRangeAddress mergedRegion = new CellRangeAddress(
                    startRow,          // 起始行
                    startRow,      // 结束行（合并2行）
                    currentCol,        // 起始列（如G列=6）
                    currentCol + 1     // 结束列（如H列=7）
            );

            // 添加合并区域到工作表
            try {
                sheet.addMergedRegion(mergedRegion);
            } catch (Exception e) {
                log.warn("合并单元格失败 rowIndex  {} colIndex {}", rowIndex, colIndex, e);
            }
        }
    }
}
